mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-24 04:02:40 -06:00
Removed AccountDate and velvet rope
This commit is contained in:
parent
f772456727
commit
d3a352f395
13 changed files with 11 additions and 107 deletions
|
@ -77,7 +77,6 @@ from toontown.shtiker import NewbiePurchaseManager/AI
|
||||||
from toontown.safezone import SafeZoneManager/AI
|
from toontown.safezone import SafeZoneManager/AI
|
||||||
from toontown.tutorial import TutorialManager/AI
|
from toontown.tutorial import TutorialManager/AI
|
||||||
from toontown.catalog import CatalogManager/AI
|
from toontown.catalog import CatalogManager/AI
|
||||||
from toontown.catalog import AccountDate/AI
|
|
||||||
from toontown.safezone import DistributedTreasure/AI
|
from toontown.safezone import DistributedTreasure/AI
|
||||||
from toontown.coghq import DistributedCashbotBossTreasure/AI
|
from toontown.coghq import DistributedCashbotBossTreasure/AI
|
||||||
from toontown.building import DistributedTrophyMgr/AI
|
from toontown.building import DistributedTrophyMgr/AI
|
||||||
|
@ -1536,11 +1535,6 @@ dclass CatalogManager : DistributedObject {
|
||||||
startCatalog() airecv clsend;
|
startCatalog() airecv clsend;
|
||||||
};
|
};
|
||||||
|
|
||||||
dclass AccountDate : DistributedObject {
|
|
||||||
requestDate() airecv clsend;
|
|
||||||
requestDateResult(string);
|
|
||||||
};
|
|
||||||
|
|
||||||
dclass DistributedMyTest : DistributedObject {
|
dclass DistributedMyTest : DistributedObject {
|
||||||
setMyTest(uint16) broadcast;
|
setMyTest(uint16) broadcast;
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
from pandac.PandaModules import *
|
from pandac.PandaModules import *
|
||||||
|
|
||||||
|
|
||||||
hashVal = 2798365763L
|
hashVal = 3328589302L
|
||||||
|
|
||||||
|
|
||||||
from toontown.coghq import DistributedCashbotBossSafe, DistributedCashbotBossCrane, DistributedBattleFactory, DistributedCashbotBossTreasure, DistributedCogHQDoor, DistributedSellbotHQDoor, DistributedFactoryElevatorExt, DistributedMintElevatorExt, DistributedLawOfficeElevatorExt, DistributedLawOfficeElevatorInt, LobbyManager, DistributedMegaCorp, DistributedFactory, DistributedLawOffice, DistributedLawOfficeFloor, DistributedLift, DistributedDoorEntity, DistributedSwitch, DistributedButton, DistributedTrigger, DistributedCrushableEntity, DistributedCrusherEntity, DistributedStomper, DistributedStomperPair, DistributedLaserField, DistributedGolfGreenGame, DistributedSecurityCamera, DistributedMover, DistributedElevatorMarker, DistributedBarrelBase, DistributedGagBarrel, DistributedBeanBarrel, DistributedHealBarrel, DistributedGrid, ActiveCell, DirectionalCell, CrusherCell, DistributedCrate, DistributedSinkingPlatform, BattleBlocker, DistributedMint, DistributedMintRoom, DistributedMintBattle, DistributedStage, DistributedStageRoom, DistributedStageBattle, DistributedLawbotBossGavel, DistributedLawbotCannon, DistributedLawbotChair, DistributedCogKart, DistributedCountryClub, DistributedCountryClubRoom, DistributedMoleField, DistributedCountryClubBattle, DistributedMaze, DistributedFoodBelt, DistributedBanquetTable, DistributedGolfSpot
|
from toontown.coghq import DistributedCashbotBossSafe, DistributedCashbotBossCrane, DistributedBattleFactory, DistributedCashbotBossTreasure, DistributedCogHQDoor, DistributedSellbotHQDoor, DistributedFactoryElevatorExt, DistributedMintElevatorExt, DistributedLawOfficeElevatorExt, DistributedLawOfficeElevatorInt, LobbyManager, DistributedMegaCorp, DistributedFactory, DistributedLawOffice, DistributedLawOfficeFloor, DistributedLift, DistributedDoorEntity, DistributedSwitch, DistributedButton, DistributedTrigger, DistributedCrushableEntity, DistributedCrusherEntity, DistributedStomper, DistributedStomperPair, DistributedLaserField, DistributedGolfGreenGame, DistributedSecurityCamera, DistributedMover, DistributedElevatorMarker, DistributedBarrelBase, DistributedGagBarrel, DistributedBeanBarrel, DistributedHealBarrel, DistributedGrid, ActiveCell, DirectionalCell, CrusherCell, DistributedCrate, DistributedSinkingPlatform, BattleBlocker, DistributedMint, DistributedMintRoom, DistributedMintBattle, DistributedStage, DistributedStageRoom, DistributedStageBattle, DistributedLawbotBossGavel, DistributedLawbotCannon, DistributedLawbotChair, DistributedCogKart, DistributedCountryClub, DistributedCountryClubRoom, DistributedMoleField, DistributedCountryClubBattle, DistributedMaze, DistributedFoodBelt, DistributedBanquetTable, DistributedGolfSpot
|
||||||
|
@ -33,7 +33,7 @@ from toontown.fishing import DistributedFishingPond, DistributedFishingTarget, D
|
||||||
from toontown.minigame import DistributedMinigame, DistributedMinigameTemplate, DistributedRaceGame, DistributedCannonGame, DistributedPhotoGame, DistributedPatternGame, DistributedRingGame, DistributedTagGame, DistributedMazeGame, DistributedTugOfWarGame, DistributedCatchGame, DistributedDivingGame, DistributedTargetGame, DistributedTravelGame, DistributedPairingGame, DistributedVineGame, DistributedIceGame, DistributedCogThiefGame, DistributedTwoDGame
|
from toontown.minigame import DistributedMinigame, DistributedMinigameTemplate, DistributedRaceGame, DistributedCannonGame, DistributedPhotoGame, DistributedPatternGame, DistributedRingGame, DistributedTagGame, DistributedMazeGame, DistributedTugOfWarGame, DistributedCatchGame, DistributedDivingGame, DistributedTargetGame, DistributedTravelGame, DistributedPairingGame, DistributedVineGame, DistributedIceGame, DistributedCogThiefGame, DistributedTwoDGame
|
||||||
from toontown.racing import DistributedVehicle, DistributedStartingBlock, DistributedRace, DistributedKartPad, DistributedRacePad, DistributedViewPad, DistributedStartingBlock, DistributedLeaderBoard, DistributedGag, DistributedProjectile
|
from toontown.racing import DistributedVehicle, DistributedStartingBlock, DistributedRace, DistributedKartPad, DistributedRacePad, DistributedViewPad, DistributedStartingBlock, DistributedLeaderBoard, DistributedGag, DistributedProjectile
|
||||||
from toontown.distributed.NonRepeatableRandomSourceUD import NonRepeatableRandomSourceUD
|
from toontown.distributed.NonRepeatableRandomSourceUD import NonRepeatableRandomSourceUD
|
||||||
from toontown.catalog import CatalogManager, AccountDate
|
from toontown.catalog import CatalogManager
|
||||||
from toontown.ai.DistributedHydrantZeroMgr import DistributedHydrantZeroMgr
|
from toontown.ai.DistributedHydrantZeroMgr import DistributedHydrantZeroMgr
|
||||||
from toontown.rpc.AwardManager import AwardManager
|
from toontown.rpc.AwardManager import AwardManager
|
||||||
from toontown.parties import DistributedParty, DistributedPartyActivity, DistributedPartyTeamActivity, DistributedPartyCannon, DistributedPartyCannonActivity, DistributedPartyCatchActivity, DistributedPartyWinterCatchActivity, DistributedPartyCogActivity, DistributedPartyWinterCogActivity, DistributedPartyFireworksActivity, DistributedPartyDanceActivityBase, DistributedPartyDanceActivity, DistributedPartyDance20Activity, DistributedPartyValentineDanceActivity, DistributedPartyValentineDance20Activity, DistributedPartyTrampolineActivity, DistributedPartyValentineTrampolineActivity, DistributedPartyVictoryTrampolineActivity, DistributedPartyWinterTrampolineActivity, DistributedPartyTugOfWarActivity, DistributedPartyJukeboxActivityBase, DistributedPartyJukeboxActivity, DistributedPartyJukebox40Activity, DistributedPartyValentineJukeboxActivity, DistributedPartyValentineJukebox40Activity
|
from toontown.parties import DistributedParty, DistributedPartyActivity, DistributedPartyTeamActivity, DistributedPartyCannon, DistributedPartyCannonActivity, DistributedPartyCatchActivity, DistributedPartyWinterCatchActivity, DistributedPartyCogActivity, DistributedPartyWinterCogActivity, DistributedPartyFireworksActivity, DistributedPartyDanceActivityBase, DistributedPartyDanceActivity, DistributedPartyDance20Activity, DistributedPartyValentineDanceActivity, DistributedPartyValentineDance20Activity, DistributedPartyTrampolineActivity, DistributedPartyValentineTrampolineActivity, DistributedPartyVictoryTrampolineActivity, DistributedPartyWinterTrampolineActivity, DistributedPartyTugOfWarActivity, DistributedPartyJukeboxActivityBase, DistributedPartyJukeboxActivity, DistributedPartyJukebox40Activity, DistributedPartyValentineJukeboxActivity, DistributedPartyValentineJukebox40Activity
|
||||||
|
|
|
@ -1605,8 +1605,6 @@ class OTPClientRepository(ClientRepositoryBase):
|
||||||
return 0
|
return 0
|
||||||
elif paidStatus == 'FULL':
|
elif paidStatus == 'FULL':
|
||||||
return OTPGlobals.AccessFull
|
return OTPGlobals.AccessFull
|
||||||
elif paidStatus == 'VELVET':
|
|
||||||
return OTPGlobals.AccessVelvetRope
|
|
||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
|
@ -376,7 +376,6 @@ ChatFeedback_PassedBlacklist = 32
|
||||||
ChatFeedback_Whitelist = 64
|
ChatFeedback_Whitelist = 64
|
||||||
ChatFeedback_OpenChat = 128
|
ChatFeedback_OpenChat = 128
|
||||||
AccessUnknown = 0
|
AccessUnknown = 0
|
||||||
AccessVelvetRope = 1
|
|
||||||
AccessFull = 2
|
AccessFull = 2
|
||||||
AccessInvalid = 3
|
AccessInvalid = 3
|
||||||
AvatarPendingCreate = -1
|
AvatarPendingCreate = -1
|
||||||
|
|
|
@ -16,7 +16,6 @@ from toontown.ai.HolidayManagerAI import HolidayManagerAI
|
||||||
from toontown.ai.NewsManagerAI import NewsManagerAI
|
from toontown.ai.NewsManagerAI import NewsManagerAI
|
||||||
from toontown.ai.QuestManagerAI import QuestManagerAI
|
from toontown.ai.QuestManagerAI import QuestManagerAI
|
||||||
from toontown.ai import BankManagerAI
|
from toontown.ai import BankManagerAI
|
||||||
from toontown.catalog.AccountDateAI import AccountDateAI
|
|
||||||
from toontown.building.DistributedBuildingQueryMgrAI import DistributedBuildingQueryMgrAI
|
from toontown.building.DistributedBuildingQueryMgrAI import DistributedBuildingQueryMgrAI
|
||||||
from toontown.building.DistributedTrophyMgrAI import DistributedTrophyMgrAI
|
from toontown.building.DistributedTrophyMgrAI import DistributedTrophyMgrAI
|
||||||
from toontown.catalog.CatalogManagerAI import CatalogManagerAI
|
from toontown.catalog.CatalogManagerAI import CatalogManagerAI
|
||||||
|
@ -120,8 +119,6 @@ class ToontownAIRepository(ToontownInternalRepository):
|
||||||
self.holidayManager = HolidayManagerAI(self)
|
self.holidayManager = HolidayManagerAI(self)
|
||||||
self.codeRedemptionMgr = TTCodeRedemptionMgrAI(self)
|
self.codeRedemptionMgr = TTCodeRedemptionMgrAI(self)
|
||||||
self.codeRedemptionMgr.generateWithRequired(2)
|
self.codeRedemptionMgr.generateWithRequired(2)
|
||||||
self.accountDateMgr = AccountDateAI(self)
|
|
||||||
self.accountDateMgr.generateWithRequired(2)
|
|
||||||
self.buildingQueryMgr = DistributedBuildingQueryMgrAI(self)
|
self.buildingQueryMgr = DistributedBuildingQueryMgrAI(self)
|
||||||
self.buildingQueryMgr.generateWithRequired(2)
|
self.buildingQueryMgr.generateWithRequired(2)
|
||||||
self.groupManager.generateWithRequired(2)
|
self.groupManager.generateWithRequired(2)
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
from direct.distributed.DistributedObject import DistributedObject
|
|
||||||
from direct.directnotify.DirectNotifyGlobal import directNotify
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
class AccountDate(DistributedObject):
|
|
||||||
neverDisable = 1
|
|
||||||
notify = directNotify.newCategory('AccountDate')
|
|
||||||
|
|
||||||
def __init__(self, cr):
|
|
||||||
DistributedObject.__init__(self, cr)
|
|
||||||
self.accountDays = 0
|
|
||||||
|
|
||||||
def announceGenerate(self):
|
|
||||||
DistributedObject.announceGenerate(self)
|
|
||||||
base.cr.accountDateMgr = self
|
|
||||||
taskMgr.doMethodLater(10, self.requestDate, 'request-task')
|
|
||||||
|
|
||||||
def delete(self):
|
|
||||||
if hasattr(base.cr, 'accountDateMgr'):
|
|
||||||
if base.cr.accountDateMgr is self:
|
|
||||||
del base.cr.accountDateMgr
|
|
||||||
DistributedObject.delete(self)
|
|
||||||
|
|
||||||
def getAccountDays(self):
|
|
||||||
return self.accountDays
|
|
||||||
|
|
||||||
def requestDate(self, task=None):
|
|
||||||
self.sendUpdate('requestDate')
|
|
||||||
|
|
||||||
if task is not None:
|
|
||||||
return task.done
|
|
||||||
|
|
||||||
def requestDateResult(self, result):
|
|
||||||
if result is None:
|
|
||||||
notify.warning('Invalid response from server.')
|
|
||||||
self.accountDays = 0
|
|
||||||
else:
|
|
||||||
date = datetime.strptime(result, "%a %b %d %H:%M:%S %Y")
|
|
||||||
self.accountDays = (datetime.now() - date).days
|
|
|
@ -1,23 +0,0 @@
|
||||||
from direct.directnotify import DirectNotifyGlobal
|
|
||||||
from direct.distributed.DistributedObjectAI import DistributedObjectAI
|
|
||||||
|
|
||||||
class AccountDateAI(DistributedObjectAI):
|
|
||||||
notify = DirectNotifyGlobal.directNotify.newCategory("AccountDateAI")
|
|
||||||
|
|
||||||
def announceGenerate(self):
|
|
||||||
DistributedObjectAI.announceGenerate(self)
|
|
||||||
|
|
||||||
def requestDate(self):
|
|
||||||
avId = self.air.getAvatarIdFromSender()
|
|
||||||
av = self.air.doId2do.get(avId)
|
|
||||||
|
|
||||||
if not av:
|
|
||||||
return
|
|
||||||
|
|
||||||
def callback(dclass, fields):
|
|
||||||
if dclass is not None and dclass == self.air.dclassesByName['AccountAI'] and fields.has_key('CREATED'):
|
|
||||||
self.sendUpdateToAvatarId(avId, 'requestDateResult', [fields.get('CREATED')])
|
|
||||||
else:
|
|
||||||
self.sendUpdateToAvatarId(avId, 'requestDateResult', [None])
|
|
||||||
|
|
||||||
self.air.dbInterface.queryObject(self.air.dbId, av.DISLid, callback)
|
|
|
@ -5,7 +5,6 @@ from DistributedNPCToonBaseAI import *
|
||||||
from toontown.estate import BankGlobals
|
from toontown.estate import BankGlobals
|
||||||
|
|
||||||
class DistributedNPCBankerAI(DistributedNPCToonBaseAI):
|
class DistributedNPCBankerAI(DistributedNPCToonBaseAI):
|
||||||
FourthGagVelvetRopeBan = config.GetBool('want-ban-fourth-gag-velvet-rope', 0)
|
|
||||||
|
|
||||||
def __init__(self, air, npcId, questCallback = None, hq = 0):
|
def __init__(self, air, npcId, questCallback = None, hq = 0):
|
||||||
DistributedNPCToonBaseAI.__init__(self, air, npcId, questCallback)
|
DistributedNPCToonBaseAI.__init__(self, air, npcId, questCallback)
|
||||||
|
|
|
@ -5,7 +5,6 @@ from DistributedNPCToonBaseAI import *
|
||||||
from toontown.quest import Quests
|
from toontown.quest import Quests
|
||||||
|
|
||||||
class DistributedNPCToonAI(DistributedNPCToonBaseAI):
|
class DistributedNPCToonAI(DistributedNPCToonBaseAI):
|
||||||
FourthGagVelvetRopeBan = config.GetBool('want-ban-fourth-gag-velvet-rope', 0)
|
|
||||||
|
|
||||||
def __init__(self, air, npcId, questCallback = None, hq = 0):
|
def __init__(self, air, npcId, questCallback = None, hq = 0):
|
||||||
DistributedNPCToonBaseAI.__init__(self, air, npcId, questCallback)
|
DistributedNPCToonBaseAI.__init__(self, air, npcId, questCallback)
|
||||||
|
|
|
@ -474,7 +474,7 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
|
||||||
if oldTracks == 0 and oldLevels == 0:
|
if oldTracks == 0 and oldLevels == 0:
|
||||||
self.notify.warning('reseting invalid inventory to MAX on toon: %s' % self.doId)
|
self.notify.warning('reseting invalid inventory to MAX on toon: %s' % self.doId)
|
||||||
self.inventory.zeroInv()
|
self.inventory.zeroInv()
|
||||||
self.inventory.maxOutInv(1, 1)
|
self.inventory.maxOutInv(1)
|
||||||
else:
|
else:
|
||||||
newInventory = InventoryBase.InventoryBase(self)
|
newInventory = InventoryBase.InventoryBase(self)
|
||||||
oldList = emptyInv.makeFromNetStringForceSize(inventoryNetString, oldTracks, oldLevels)
|
oldList = emptyInv.makeFromNetStringForceSize(inventoryNetString, oldTracks, oldLevels)
|
||||||
|
@ -488,9 +488,9 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
|
||||||
def getInventory(self):
|
def getInventory(self):
|
||||||
return self.inventory.makeNetString()
|
return self.inventory.makeNetString()
|
||||||
|
|
||||||
def doRestock(self, noUber = 1, noPaid = 1):
|
def doRestock(self, noUber = 1):
|
||||||
self.inventory.zeroInv()
|
self.inventory.zeroInv()
|
||||||
self.inventory.maxOutInv(noUber, noPaid)
|
self.inventory.maxOutInv(noUber)
|
||||||
self.d_setInventory(self.inventory.makeNetString())
|
self.d_setInventory(self.inventory.makeNetString())
|
||||||
|
|
||||||
def setDefaultShard(self, shard):
|
def setDefaultShard(self, shard):
|
||||||
|
@ -3703,10 +3703,6 @@ class DistributedToonAI(DistributedPlayerAI.DistributedPlayerAI, DistributedSmoo
|
||||||
if paidStatus == 'unpaid':
|
if paidStatus == 'unpaid':
|
||||||
access = 1
|
access = 1
|
||||||
if access == OTPGlobals.AccessInvalid:
|
if access == OTPGlobals.AccessInvalid:
|
||||||
if not __dev__:
|
|
||||||
self.air.writeServerEvent('Setting Access', self.doId, 'setAccess not being sent by the OTP Server, changing access to unpaid')
|
|
||||||
access = OTPGlobals.AccessVelvetRope
|
|
||||||
elif __dev__:
|
|
||||||
access = OTPGlobals.AccessFull
|
access = OTPGlobals.AccessFull
|
||||||
self.setGameAccess(access)
|
self.setGameAccess(access)
|
||||||
|
|
||||||
|
|
|
@ -241,13 +241,12 @@ class InventoryBase(DirectObject.DirectObject):
|
||||||
self.updateInventory(newInventory)
|
self.updateInventory(newInventory)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
def maxOutInv(self, filterUberGags = 0, filterPaidGags = 0):
|
def maxOutInv(self, filterUberGags = 0):
|
||||||
unpaid = self.toon.getGameAccess() != ToontownGlobals.AccessFull
|
unpaid = self.toon.getGameAccess() != ToontownGlobals.AccessFull
|
||||||
for track in xrange(len(Tracks)):
|
for track in xrange(len(Tracks)):
|
||||||
if self.toon.hasTrackAccess(track):
|
if self.toon.hasTrackAccess(track):
|
||||||
for level in xrange(len(Levels[track])):
|
for level in xrange(len(Levels[track])):
|
||||||
if level <= LAST_REGULAR_GAG_LEVEL or not filterUberGags:
|
if level <= LAST_REGULAR_GAG_LEVEL or not filterUberGags:
|
||||||
if not filterPaidGags or not (unpaid and gagIsPaidOnly(track, level)):
|
|
||||||
self.addItem(track, level)
|
self.addItem(track, level)
|
||||||
|
|
||||||
addedAnything = 1
|
addedAnything = 1
|
||||||
|
@ -259,11 +258,9 @@ class InventoryBase(DirectObject.DirectObject):
|
||||||
level = len(Levels[track]) - 1
|
level = len(Levels[track]) - 1
|
||||||
if level > LAST_REGULAR_GAG_LEVEL and filterUberGags:
|
if level > LAST_REGULAR_GAG_LEVEL and filterUberGags:
|
||||||
level = LAST_REGULAR_GAG_LEVEL
|
level = LAST_REGULAR_GAG_LEVEL
|
||||||
if not filterPaidGags or not (unpaid and gagIsPaidOnly(track, level)):
|
|
||||||
result = self.addItem(track, level)
|
result = self.addItem(track, level)
|
||||||
level -= 1
|
level -= 1
|
||||||
while result <= 0 and level >= 0:
|
while result <= 0 and level >= 0:
|
||||||
if not filterPaidGags or not (unpaid and gagIsPaidOnly(track, level)):
|
|
||||||
result = self.addItem(track, level)
|
result = self.addItem(track, level)
|
||||||
level -= 1
|
level -= 1
|
||||||
|
|
||||||
|
|
|
@ -1852,7 +1852,7 @@ class LocalToon(DistributedToon.DistributedToon, LocalAvatar.LocalAvatar):
|
||||||
self.inventory.updateTotalPropsText()
|
self.inventory.updateTotalPropsText()
|
||||||
|
|
||||||
def getAccountDays(self):
|
def getAccountDays(self):
|
||||||
return base.cr.accountDateMgr.getAccountDays()
|
return 0
|
||||||
|
|
||||||
def hasActiveBoardingGroup(self):
|
def hasActiveBoardingGroup(self):
|
||||||
if hasattr(localAvatar, 'boardingParty') and localAvatar.boardingParty:
|
if hasattr(localAvatar, 'boardingParty') and localAvatar.boardingParty:
|
||||||
|
|
|
@ -102,19 +102,6 @@ UnpaidMaxSkills = [Levels[0][1] - 1,
|
||||||
Levels[6][1] - 1]
|
Levels[6][1] - 1]
|
||||||
ExperienceCap = 300
|
ExperienceCap = 300
|
||||||
|
|
||||||
def gagIsPaidOnly(track, level):
|
|
||||||
return Levels[track][level] > UnpaidMaxSkills[track]
|
|
||||||
|
|
||||||
|
|
||||||
def gagIsVelvetRoped(track, level):
|
|
||||||
if level > 0:
|
|
||||||
if track in [4, 5]:
|
|
||||||
if level > 3:
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
MaxToonAcc = 95
|
MaxToonAcc = 95
|
||||||
StartingLevel = 0
|
StartingLevel = 0
|
||||||
|
|
Loading…
Reference in a new issue